package excercise;

public class EX04_OOP {
	
	// 자릿수 구분 문자
	// 정수 리터럴이 너무 길면 가독성에 문제 있음
	// JDK 7에 새롭게 추가된 기능 중 하나는 3자릿수마다 _ 를 넣어서 사용할수 있게 한 것
	
	// 클래스의 사용되는 변수의 종류 
	// 멤버member 변수
	//   -> class 블록 내 선언한 변수
	//	 -> 해당 클래스를 통해서만 사용가능한 변수 
	// 인스턴스instance 변수
	//	 -> 객체를 가리키는 변수를 의미
	//	 -> 클래스와 new 연산로  구성된 문장을 실행했을떄의 결과물 
	
	// 생성자 constructor 
	// 생성자는 객체를 생성하는데 사용하는 특별한 메서드
	// 모든 클래스는 하나 이상의 생성자가 있어야함
	// 설령, 메서드를 작성하지 않아도 컴파일러가 자동으로 만들어서 넣어줌
	// 생성자는 일반 메서드와는 달리
	// void나 return을 사용하지 않음
	// 생성자 이름은 클래스이름과 동일해야 함
	
	public static void main(String[] args) {
		Retangle rRed = new Retangle();
		rRed.width = 4;
		rRed.height = 40;
		rRed.color = "red";
		rRed.getArea();
		rRed.getPerimeter();
		Retangle rOrange = new Retangle();
		rOrange.width = 3.5f;
		rOrange.height = 35.9f;
		rOrange.color = "orange";
		rOrange.getArea();
		rOrange.getPerimeter();
		//rRed 출력
		System.out.println(rRed);
		System.out.println(rRed.width);
		System.out.println(rRed.height);
		System.out.println(rRed.color);
		
		// 선풍기
		Fan fan1 = new Fan();
		fan1.speed = fan1.FAST;	//최고속도
		fan1.on = true; 		// 동작중
		fan1.radius = 10;
		fan1.color = "yellow";
		fan1.showFaninfo();
		fan1.sdd();
		
		Fan fan2 = new Fan();
		fan2.speed = fan2.MEDIUM;	// 중간속도
		fan2.on = false; 			// 동작중
		fan2.radius = 5;
		fan2.showFaninfo();
		// fan2 출력
		System.out.println(fan2);
		System.out.println(fan2.speed);
		System.out.println(fan2.on);
		System.out.println(fan2.color);
		
		// 은행 계좌
		Account a = new Account();
		a.aid = 1122;
		a.balance = 20000;
		a.interestRate = 4.5f;
		a.dateCreated = "2013-11-06 13:15:45";
		System.out.println(a.balance);
		a.withDraw(3500);
		System.out.println(a.balance);
		a.deposit(4000);
		a.total();
		// 주식정보
		Stock s = new Stock();
		s.sname = "경영기술";
		s.pre = 750_000;			
		s.cur = 1_500_000;
		System.out.println(s.getChangePercent());
		
		
	
	
	}// main

}// class
	class Retangle{
	float width = 1.0F;
	float height = 1.0f;
	String color = "white";
	
	void getArea(){
		System.out.println(width * height);
	}
	void getPerimeter(){
		System.out.println((width + height)*2);
	}
}
class Fan{
	final int SLOW = 1;
	final int MEDIUM = 2;
	final int FAST = 3;
	int speed = SLOW;
    boolean on = false;
    float radius = 5.0f;
    String color = "blue";
    
    void showFaninfo(){
    	/*String msg = "";
    	if( on == true)
    		msg = speed + "/" + color + "/" + radius + "," + "작동중";
    	else if( on == true)
    		msg = speed + "/" + color + "/" + radius + "," + "꺼져있음";
    		*/
    	System.out.println("선풍기의 색은" + color + "이며 크기는 " + radius + "이고 " + speed +
    			"에 속도로" + sdd());
    }
    void sd(){
    	System.out.println(this.on);
    	this.sdd();
    }
    String sdd(){
    	if(this.on == true){
    		return "동작중";
    	} else 
    		return "꺼져있음";
    }
}

class Account{
int aid = 0;
int balance = 0;
float interestRate = 0;
String dateCreated;
void getMon(){
	System.out.println("월간 이자율은" + interestRate / 12 + "입니다");
}
int withDraw(int gold){
	System.out.println(balance - gold);
	return balance -= gold;
	}

int deposit(int gold){
	System.out.println(balance + gold);
	return balance += gold;
// call by value 로 인해 예금 금액이 제대로 차감되지 않음
}
void total(){
	System.out.println("잔액은" + balance + "이고 이자율은" + interestRate / 12 + "입니다" +
							" 통장은" + dateCreated + "만들었습니다");
	
}
}
class Stock{
String sname;
int pre;
int cur;
float getChangePercent(){
	return (1-((float)cur / pre)) * 100;
}
}


